/* 
 * File:   fctions.h
 * Author: rslmanu
 *
 * Created on 18 mai 2009, 15:39
 */

/*
Copyright (C) 2009 Roussel Emmanuel

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef _FCTIONS_H
#define	_FCTIONS_H

#ifdef	__cplusplus
extern "C" {
#endif

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <termios.h>
#include <time.h>   //pr la fction rand
#include "llist.h"  //listes chainées

#define OFFSET_X 10
#define OFFSET_Y 3
#define TAILLE_X 60
#define TAILLE_Y 20

    enum { NORD, SUD, EST, OUEST };

    struct termios tios;
    tcflag_t old_c_lflag;

    typedef struct pomme{
        int pomme_in_progress;
        int pomme_x;
        int pomme_y;
    } pomme;
    
    //------------------------------------------------------------------------------

    //effacer l'écran et placer curseur en haut à gauche
#define CLS() 	printf("\033[H\033[2J"); \
                    fflush(stdout)

    //texte, fond
#define COULEUR(t,f) 	printf("\033[%d;%dm",t,f); \
                            fflush(stdout)
    /*
     Texte      Fond
    30 Gris moyen  40 Noir
    31 Rouge       41 Rouge foncé
    32 Vert        42 Vert foncé
    33 Jaune       43 brun
    34 Bleu        44 Bleu foncé
    35 Magenta     45 Mauve
    36 Cyan        46 Cyan foncé
    37 Blanc       47 gris clair
    39 Blanc gras
     */

    //remet blanc sur fond noir
#define REINIT_COULEUR()	printf("\033[0m"); \
                                    fflush(stdout)

    //change le titre de la console
#define TITRE_CONSOLE(titre)	printf("\033]0;%s\007", titre); \
                                    fflush(stdout)

    //place le curseur en x,y. CURSEUR(1,1) le remet en haut à gauche
#define CURSEUR(x,y)	printf("\033[%d;%dH", y, x); \
                            fflush(stdout)

    //cache le curseur
#define HIDE_CUR() 	printf("\033[?25l"); \
                            fflush(stdout)

    //le montre
#define SHOW_CUR() 	printf("\033[?25h"); \
                            fflush(stdout)

    //update l'affichage de la console
#define UPD()	fflush(stdout)
    

    //------------------------------------------------------------------------------

    int read_char();
    void print_map();
    void update_serpent(bout **serpent, int dir);
    void update_pomme(bout **serpent, pomme *pom);
    int check_perdu(bout *serpent);

    int pif(int min, int max);  //return une valeur between min et max !

    int reconfigure_terminal(struct termios *prev);
    int restaure_terminal(struct termios *prev);



#ifdef	__cplusplus
}
#endif

#endif	/* _FCTIONS_H */

